package cn.edu.ecut.dao;

import cn.edu.ecut.entity.Module;
import cn.edu.ecut.entity.Topic;
import com.mozicoding.jdbc.DatabaseType;
import com.mozicoding.jdbc.JdbcHelper;
import com.mozicoding.jdbc.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class TopicDao {

    private static final String BASE_QUERY = "SELECT id , title , score , level , code , module_id FROM t_topics " ;

    private static final RowMapper<Topic> mapper = new RowMapper<Topic>() { // 使用匿名类实现RowMapper接口
        @Override
        public Topic wrap(ResultSet rs) throws SQLException {
            Topic t = new Topic(); // 创建Topic对象
            // 从结果集中获取指定列的值后设置到Topic对象中
            int id = rs.getInt( "id" );
            t.setId( id );
            t.setTitle( rs.getString( "title" ) );
            t.setScore( rs.getInt( "score" ) );
            t.setLevel( rs.getInt( "level" ) );
            t.setCode( rs.getString( "code" ) );

            int moduleId = rs.getInt( "module_id" );
            // 创建一个Module实例用来记录 module_id
            Module module = new Module();
            module.setId( moduleId ); // 将查询得到的模块编号设置到模块对象中
            // 为Topic实例设置模块
            t.setModule( module );

            return t;
        }
    };

    /**
     * 根据用户指定的题目编号查询数据库后返回与数据库表中相应记录对应额Topic对象
     * @param id 需要查询的题目编号(即数据库主键)
     * @return 返回与数据库表中相应记录对应额Topic对象
     */
    public Topic find( Integer id ) {
        JdbcHelper h = JdbcHelper.getInstance( DatabaseType.MYSQL );
        String select = BASE_QUERY + " WHERE id = ? ";
        Topic t = h.single( select , mapper , id ) ;
        h.release();
        return t ;
    }

    public List<Topic> findByModule( int moduleId ) {
        JdbcHelper h = JdbcHelper.getInstance( DatabaseType.MYSQL );
        String select = BASE_QUERY + " WHERE module_id = ? ";
        List<Topic> topicList = h.list( select , mapper , moduleId ) ;
        h.release();
        return topicList ;
    }

}
